﻿using System;
using l1cs_cl.client.utils;
using l1cs_cl.client.receivepackets;

namespace l1cs_cl.client
{
    class PacketHandler
    {
        public PacketHandler() { }

        public bool handlePacket( byte[] abyte0 )
        {
            int i = abyte0[0] & 0xff;
            bool ret = true;

            switch ( i )
            {
                case Opcodes.S_OPCODE_ACTIVESPELLS:
                    // 同じOpcodeでS_OPCODE_PACKETBOX S_OPCODE_ACTIVESPELLS S_OPCODE_SKILLICONGFX
                    // の種類がある
                    if ( abyte0[1] == 0x14 && abyte0[2] == 69 )
                    {
                        // S_OPCODE_ACTIVESPELLS
                        // TODO:
                        break;
                    }
                    else
                    {
                        //S_OPCODE_PACKETBOX S_OPCODE_SKILLICONGFX
                        ret = false;
                        break;
                    }

                case Opcodes.S_OPCODE_OWNCHARSTATUS:
                    new R_OwnCharStatus( abyte0 );
                    break;

                case Opcodes.S_OPCODE_UNKNOWN1:
                    // TODO:
                    break;

                case Opcodes.S_OPCODE_MAPID:
                    // S_OPCODE_UNDERWATERも同じ番号だがつかってないようだ
                    new R_MapID( abyte0 );
                    break;

                case Opcodes.S_OPCODE_CHARPACK:
                    new R_CharPack( abyte0 );
                    break;

                case Opcodes.S_OPCODE_INVLIST:
                    new R_InvList( abyte0 );
                    break;

                default:
                    ret = false;
                    break;
            }
            if ( ret == false )
            {
                String s = Convert.ToString( abyte0[0] & 0xff, 16 );
                Console.WriteLine( "用途不明オペコード:データ内容" );
                Console.WriteLine( "オペコード " + s );
                Console.WriteLine( ByteArrayUtil.dumpToString( abyte0 ) );
            }
            return ret;
        }
    }
}
